// 211228
// 事件、参数、多监听

var events = require('events');

var emitter = new events.EventEmitter();

var eventName = 'ev';

// EventEmitter 提供了多个属性，如 on 和 emit。
// on 函数用于绑定事件函数，emit 属性用于触发一个事件。

emitter.on(eventName, function(arg1, arg2) {
	console.log('listener..01', arg1, arg2);
});

emitter.on(eventName, function(arg1, arg2) {
	console.log('listener..02', arg1, arg2);
});

// 多次触发

emitter.emit(eventName, 'arg1', 'arg2');

emitter.emit(eventName, 100, 200);

// 类方法：返回指定事件的监听器数量
console.log('listener count=', events.listenerCount(emitter, eventName));
// 属性方法
console.log('listener count(2)=', emitter.listenerCount(eventName));

// 返回指定事件的监听器数组
// [ [Function (anonymous)], [Function (anonymous)] ]
console.log(emitter.listeners(eventName));

// 特殊：error 事件
// Error [ERR_UNHANDLED_ERROR]
// 监听 error事件：必须在前！
emitter.on('error', function(){
	console.log('发生error事件...');
});

emitter.emit('error');

// 继承 EventEmitter
// 大多数时候我们不会直接使用 EventEmitter，而是在对象中继承它。
// ?